\section{6. Patterns 3: State patterns}

\begin{center}
\line(1,0){500}
\end{center}

\begin{itemize}
\item Redegør for, hvad et software design pattern er.
\item Redegør for de forskellige måder at implementere en state machine på. 
\item Redegør for oppbygningen af GoF State Pattern 
\item Sammenlign switch/case-implementering med GoF State 
\item Redegør for fordele og ulemper ved anvendelsen af GoF State.  
\item Redegør for, hvordan et UML (SysML) state machine diagram mapper til GoF State. 
\end{itemize}
\begin{center}
\line(1,0){500}
\end{center}

\subsubsection{Hvad er et SW Design Pattern}
\begin{itemize}
    \item Et løsnings-forslag til et almindeligt opstående problem
    \item En template
    \item En form for formel "best practice"
\end{itemize}
\subsubsection{Forskellige State Machines}
\begin{itemize}
    \item Switch/Case på state
    \item State/Event table\\
    \includegraphics[scale=0.5]{6-eventtable}
    \begin{itemize}
        \item God til "flade" (ingen nested states) state machines
        \item Let at ændre
    \end{itemize}
    \item GoF State Pattern
\end{itemize}
\subsubsection{Opbygningen af GoF State Pattern}



\begin{itemize}
    \item Benyttes ved indviklede og nestede STM
    \item Klient klassen indeholder en reference til sin state
    \item State er en basis klasse med (delvist)implementerede medlemmer
    
\end{itemize}
\subsubsection{Switch/Case vs GoF State}
\begin{itemize}
    \item Switch/Case fører til en mere statisk state machine
    \item Switch/Case er let læseligt så længe det er småt
    \item Switch/Case bliver hurtig uoverskuelig med for mange cases

    \item GoF State har en smule mere overhead
\end{itemize}
\subsubsection{Fordeler og ulemper ved GoF state}
\subsubsection{UML til GoF State}
\includegraphics[scale=.8]{6-gofstate}